//
//  Test5ViewController.m
//  JKNSURLSession
//
//  Created by 王冲 on 2019/1/22.
//  Copyright © 2019年 JK科技有限公司. All rights reserved.
//

#import "Test5ViewController.h"
#import "JKProgressBtn.h"
@interface Test5ViewController ()<NSURLSessionDownloadDelegate>

// 全局的网络会话，管理所有的网络任务
@property(nonatomic,strong) NSURLSession *session;

// 进度的View
@property(nonatomic,strong) JKProgressBtn *progressView;

@end

@implementation Test5ViewController

-(JKProgressBtn *)progressView{
    
    if (!_progressView) {
        
        _progressView = [[JKProgressBtn alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2-50, [UIScreen mainScreen].bounds.size.height/2-50, 100, 100)];
        _progressView.backgroundColor = [UIColor yellowColor];
    }
    
    return _progressView;
}

-(NSURLSession *)session{
    
    // NSURLSession 默认是在子线程开启任务的
    if (!_session) {
        
        /**
         全局网络环境的一个配置
         比如：身份验证，浏览器类型以及缓存，超时，这些都会被记录在
         */
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
    }
    return _session;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    // 添加进度View
    [self.view addSubview:self.progressView];
    
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    // 1.创建url:http://localhost
    NSURL *url = [NSURL URLWithString:@"http://localhost/2ittt-zm.mp4"];
    [self taskWithUrl:url];
}

-(void)taskWithUrl:(NSURL *)url{
    
    //如果你要监听下载进度，必须使用代理。
    //[NSURLSession sharedSession] 是全局的单例。整个系统都会用
    //如果你要更进下载进度，就不能block 。
    [[self.session downloadTaskWithURL:url]resume];
    
}

/**
 1、下载完成的方法
 */
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    
    JKLog(@"下载完成");
}

/**
 2、下载续传数据的方法
 */
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{
    
    
}

/**
 3、下载进度的方法
 
 @param session 网络会话
 @param downloadTask 调用代理方式的下载任务
 @param bytesWritten 本次下载的字节数
 @param totalBytesWritten 已经下载的字节数
 @param totalBytesExpectedToWrite 期望下载的字节数 -- 文件的总大小
 */
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    
    float progress = (float)totalBytesWritten/totalBytesExpectedToWrite;
    JKLog(@"进度=%f",progress);

    dispatch_async(dispatch_get_main_queue(), ^{
        
        self.progressView.progress = progress;
    });
}

@end
